package br.com.findme.findmeserver.entidade;

import java.io.Serializable;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

import br.com.findme.findmeserver.entidade.Grupo;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;


/**
 * The persistent class for the T_GRUPO database table.
 * 
 */
@Entity
@Table(name="T_GRUPO")
public class Grupo implements Serializable {
	private static final long serialVersionUID = 1L;
	private int id;
	private String about;
	private int ativo;
	private String nome;
	private List<Usuario> usuarios = new ArrayList<Usuario>();
	private Usuario usuario;
	
	public Grupo() {
	}


	@Id
	public int getId() {
		return this.id;
	}

	public void setId(int id) {
		this.id = id;
	}


	public String getAbout() {
		return this.about;
	}

	public void setAbout(String about) {
		this.about = about;
	}


	public int getAtivo() {
		return this.ativo;
	}

	public void setAtivo(int ativo) {
		this.ativo = ativo;
	}


	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	@ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "T_MEMBROS_GRUPO", joinColumns = @JoinColumn(name = "GRUPO_ID"), inverseJoinColumns = @JoinColumn(name = "USUARIO_ID"))	
	public List<Usuario> getUsuarios() {
		return usuarios;
	}


	public void setUsuarios(List<Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	@ManyToOne
	@JoinColumn(name="USUARIO_ID")
	public Usuario getUsuario() {
		return usuario;
	}


	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}


	public static JsonSerializer<Grupo> toJSON(){
		
		return new JsonSerializer<Grupo>(){

			@Override
			public JsonElement serialize(Grupo grupo, Type type, JsonSerializationContext context) {				
				JsonObject jsonObject = new JsonObject();
		        jsonObject.addProperty("id", grupo.getId());
		        jsonObject.addProperty("nome", grupo.getNome());
		        jsonObject.addProperty("idUsuario",grupo.getUsuario().getId());
		        jsonObject.addProperty("about", grupo.getAbout());
		        jsonObject.addProperty("ativo", grupo.getAtivo());		        		        		        
		        return jsonObject;			
		     }			
		};
		
	}


}